package com.marketing.tenant.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.marketing.tenant.entity.Tenant;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 租户Mapper接口
 * 
 * @author marketing-system
 * @since 2025-09-24
 */
@Mapper
public interface TenantMapper extends BaseMapper<Tenant> {

    /**
     * 根据租户编码查询租户
     * 
     * @param tenantCode 租户编码
     * @return 租户信息
     */
    @Select("SELECT * FROM saas_tenant WHERE tenant_code = #{tenantCode} AND status != 0")
    Tenant selectByTenantCode(@Param("tenantCode") String tenantCode);

    /**
     * 根据邮箱查询租户
     * 
     * @param email 邮箱
     * @return 租户信息
     */
    @Select("SELECT * FROM saas_tenant WHERE contact_email = #{email} AND status != 0")
    Tenant selectByEmail(@Param("email") String email);

    /**
     * 检查租户编码是否存在
     * 
     * @param tenantCode 租户编码
     * @return 存在返回1，不存在返回0
     */
    @Select("SELECT COUNT(1) FROM saas_tenant WHERE tenant_code = #{tenantCode} AND status != 0")
    int existsByTenantCode(@Param("tenantCode") String tenantCode);

    /**
     * 检查邮箱是否已被使用
     * 
     * @param email 邮箱
     * @return 已使用返回1，未使用返回0
     */
    @Select("SELECT COUNT(1) FROM saas_tenant WHERE contact_email = #{email} AND status != 0")
    int existsByEmail(@Param("email") String email);

    /**
     * 检查租户编码是否存在（排除指定ID）
     * 
     * @param tenantCode 租户编码
     * @param excludeId 排除的租户ID
     * @return 存在返回1，不存在返回0
     */
    @Select("SELECT COUNT(1) FROM saas_tenant WHERE tenant_code = #{tenantCode} AND id != #{excludeId} AND status != 0")
    int existsByTenantCodeExcludeId(@Param("tenantCode") String tenantCode, @Param("excludeId") Long excludeId);

    /**
     * 检查邮箱是否已被使用（排除指定ID）
     * 
     * @param email 邮箱
     * @param excludeId 排除的租户ID
     * @return 已使用返回1，未使用返回0
     */
    @Select("SELECT COUNT(1) FROM saas_tenant WHERE contact_email = #{email} AND id != #{excludeId} AND status != 0")
    int existsByEmailExcludeId(@Param("email") String email, @Param("excludeId") Long excludeId);
}